package com.zb.utils;

import cn.dev33.satoken.util.SaFoxUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.api.R;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;

import java.util.*;

/**
 * 随机数工具类
 * @Author WEN
 * @Date 2023/7/10 0010
 **/
public class RandomUtil {
    private static Random RANDOM = new Random();
    private static final char[] A_Z_STR = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
            'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
            'X', 'Y', 'Z' };

    /**
     * 生成六位随机正整数（用于验证码）
     * @return
     */
    public static String randomNumber6() {
        String uuid = UUID.randomUUID().toString().replaceAll("-", "").replaceAll("[a-zA-Z]", "");
        return uuid.substring(0, 6);
    }

    /**
     * 生成8位随机正整数（用于验证码）
     * @return
     */
    public static String randomStr8() {
        String uuid = UUID.randomUUID().toString().replaceAll("-", "").replaceAll("[a-zA-Z]", "").substring(0, 3);
        int len = 0;
        List<String> randomStrs = new ArrayList<>();
        while (len < 3) {
            randomStrs.add(String.valueOf(A_Z_STR[Math.abs(RANDOM.nextInt(A_Z_STR.length))]));
            len++;
        }
        len = 0;
        while (len < uuid.length()) {
            randomStrs.add(String.valueOf(uuid.charAt(len)));
            len++;
        }
        // 打乱数组
        Collections.shuffle(randomStrs);
        return String.join("", randomStrs);
    }

    /**
     * 生成14位日期随机数（六日期 + 8位随机数）
     * @return
     */
    public static String dateRandom14() {
        return DateFormatUtils.format(new Date(), "yyMMdd") + random8();
    }

    /**
     * 生成8位随机数
     * @return
     */
    public static String random8() {
        return SaFoxUtil.getRandomString(8);
    }

    /**
     * 生成10位随机数
     * @return
     */
    public static String random10() {
        return SaFoxUtil.getRandomString(10);
    }


    /**
     * 生成16位的随机数
     * @return
     */
    public static String random16() {
        return SaFoxUtil.getRandomString(16);
    }

    /**
     * 生成60位的随机数
     * @return
     */
    public static String random60() {
        return SaFoxUtil.getRandomString(60);
    }

    /**
     * 生成28位随机数
     * @return
     */
    public static String random28() {
        return SaFoxUtil.getMarking28();
    }

    /**
     * 随机数 + 日期时间(共20位)
     * @return
     */
    public static String dateRandom() {
        return DateUtil.date(new Date()).toString("yyMMddHHmmssss") + SaFoxUtil.getRandomString(6);
    }


    public static void main(String[] args) {
        System.out.println(randomStr8());
    }



}
